/**
* \file affichageTxt.c
* \brief Comprend les fonctions et les procédures qui permettent d'afficher le jeu en mode texte
*/

#include <stdio.h>
#include <stdlib.h>

#include "Parametres.h"
#include "Combinaison.h"
#include "Jeu.h"


/**
* \fn void afficheCombinaisonSecrete (Jeu* jeu)
* \brief La procédure afficheCombinaisonSecrete permet d'afficher la combinaison secrète
*/

void afficheCombinaisonSecrete (Jeu* jeu)
{
    int i;

    printf ("La combinaison secrète est ");
    for (i=0; i<jeu->combinaisonSecrete.taille; i++)
    {
        printf ("%d", jeu->combinaisonSecrete.tab[i]);
    }
    printf (" ! \n");
}



/**
* \fn void afficheCombinaisonsTesteesEtIndications (Jeu* jeu, Parametres param)
* \brief La procédure afficheCombinaisonsTesteesEtIndications affiche les combinaisons
*        précédemment testées ainsi que les indications de jeu pour chaque essai
*/

void afficheCombinaisonsTesteesEtIndications (Jeu* jeu, Parametres param)
{
    int i, j;

    if (jeu->nbEssais < 10)  // Pour ne pas faire l'affichage au 1er essai
    {
        printf ("Les combinaisons précédemment testées sont : \n");
    }

    for (i=0; i<(10 - jeu->nbEssais); i++)
    {
        printf ("  Essai %d : ", i+1);

        for (j=0; j< param.taille; j++)
        {
            printf ("%d ", jeu->tabCombinaisonsTestees[i].tab[j]);
        }
/* BP pour pionsBienPlaces,  BC pour pionsBonneCouleur */
        printf ("   BP: %d  BC: %d \n", jeu->tabNbPionsBienPlaces[i], jeu->tabNbPionsBonneCouleur[i]);
    }

}


/**
* \fn void deroulementJeuTexte (Jeu* jeu, Parametres param)
* \brief La procédure deroulementJeuTexte comprend les principales actions
*        nécessaires au déroulement d'une partie en mode texte
*/

void deroulementJeuTexte (Jeu* jeu, Parametres param)
{
    int i;
    i=0;

    Combinaison combinaisonATester;
    initCombinaison (&combinaisonATester, param);

    do
    {
        saisieCombinaison (&combinaisonATester, param);
        remplirTableaux (jeu, param, &combinaisonATester, i);
        calculScore(jeu, param, i);
        jeu-> nbEssais --;
        printf ("Il vous reste %d essais. \n", jeu-> nbEssais);

        afficheCombinaisonsTesteesEtIndications(jeu, param);

        i++;
    }
    while ((jeu-> nbEssais > 0)  && (pionsBienPlaces(&jeu-> tabCombinaisonsTestees[i-1], &jeu-> combinaisonSecrete) != param.taille));

    libereCombinaison(&combinaisonATester);

// Si la partie est gagnée
    if (pionsBienPlaces(&jeu-> tabCombinaisonsTestees[i-1], &jeu-> combinaisonSecrete) == param.taille)
    {
        printf ("\nFELICITATIONS !! Vous avez trouvé la combinaison secrète ! \n");
        printf ("Pour cela vous avez fait %d essais. \n", (10 - jeu-> nbEssais));
        jeu->score = jeu->score + 20*jeu->nbEssais;
        printf ("Voici votre score : %d points. \n", jeu-> score);
    }

// Si la partie est perdue
    else if (jeu-> nbEssais == 0)
    {
        printf ("\nDommage vous n'avez pas trouvé la combinaison secrète... \n");
        afficheCombinaisonSecrete(jeu);
        jeu->score = jeu->score - 30;
        printf ("Voici votre score : %d points. \n", jeu-> score);
    }
}
